import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * @author gao
 * @date 2025/8/25 16:08
 */

public class Solution {
    /**
     * 最长无重复子数组
     * @param arr int整型一维数组
     * @return int整型
     */
    public int maxLength (int[] arr) {
        if (arr == null || arr.length == 0) {
            return 0;
        }
        Map<Integer, Integer> map = new HashMap<>();
        int left = 0, len = 0;
        for (int right = 0; right < arr.length; right++) {
            // 如果当前元素已经在map中且其索引大于等于左指针，说明在当前窗口中重复
            if (map.containsKey(arr[right]) && map.get(arr[right]) >= left) {
                // 直接将左指针移动到重复元素的下一个位置
                left = map.get(arr[right]) + 1;
            }
            // 更新当前元素的最新位置
            map.put(arr[right], right);
            len = Math.max(len, right - left + 1);
        }
        return len;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int n = in.nextInt();
            int[] arr = new int[n];
            for (int i = 0; i < arr.length; i++) {
                arr[i] = in.nextInt();
            }
            Solution solution = new Solution();
            System.out.println(solution.maxLength(arr));
        }
    }
}